#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__author__ = "Administrator"
__name__="thread_lock3"
__date__="2016/7/29"
__time__="14:39"
"""
# 死锁情况 -- 解决：使用RLock 递归锁，允许获取多把锁，但是释放也要多次释放。
# 当有多个相同锁时，自己等待自己释放锁-死锁（了解）
import threading
import time
num = 0
num2 = 0

def run(n):
    time.sleep(1)

    global num
    global num2

    lock.acquire()
    num +=1

    lock.acquire() # 此时会等待第一把锁是否，但是自己又不会是否锁，会一直处于等待状态产生阻塞，造成死锁。
    num+=2

    lock.release()
    lock.release()

    time.sleep(0.01)
    print 'num: %s\n' % num
    print 'num2: %s\n' % num2

# lock = threading.Lock()
lock = threading.RLock()    # 有个计数器，可以记住宿主程序，可以允许获取多把锁。
for i in range(100):
    t = threading.Thread(target=run,args=(i,))
    t.start()

